home *** CD-ROM | disk | FTP | other *** search
/ Delphi Developer's Kit 1996 / Delphi Developer's Kit 1996.iso / power / source15 / rexec.pas < prev    next >
Pascal/Delphi Source File  |  1995-12-22  |  3KB  |  118 lines

  1. unit Rexec;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, StdCtrls, Menus, Sockets;
  8.  
  9. type
  10.   TRExecFrm = class(TForm)
  11.     Label3: TLabel;
  12.     efUserid: TEdit;
  13.     Label1: TLabel;
  14.     efIPaddr: TEdit;
  15.     efCommand: TEdit;
  16.     Label2: TLabel;
  17.     efPassword: TEdit;
  18.     Label4: TLabel;
  19.     Memo1: TMemo;
  20.     pbRexec: TButton;
  21.     MainMenu1: TMainMenu;
  22.     File1: TMenuItem;
  23.     Exit1: TMenuItem;
  24.     Sockets1: TSockets;
  25.     procedure pbRexecClick(Sender: TObject);
  26.     procedure Exit1Click(Sender: TObject);
  27.     procedure Sockets1DataAvailable(Sender: TObject; Socket: Word);
  28.     procedure Sockets1SessionClosed(Sender: TObject; Socket: Word);
  29.     procedure Sockets1SessionConnected(Sender: TObject; Socket: Word);
  30.   private
  31.   public
  32.   end;
  33.  
  34. var
  35.   RExecFrm: TRExecFrm;
  36.   line: string;
  37.  
  38. implementation
  39.  
  40. {$R *.DFM}
  41.  
  42.  
  43. procedure TRExecFrm.pbRexecClick(Sender: TObject);
  44. begin
  45.   line := '';
  46.   if (efUserid.text = '') or (efPassword.Text = '') or
  47.      (efIPaddr.Text = '') or (efCommand.Text = '') then
  48.     begin
  49.       Application.MessageBox('Please enter all required fields!', 'REXEC ERROR',
  50.          mb_OKCancel + mb_DefButton1);
  51.       exit;
  52.     end;
  53.   Memo1.Clear;
  54.   Sockets1.IPAddr := efIPaddr.Text;
  55.   Sockets1.Port := 'exec';
  56.   Sockets1.SConnect;
  57. end;
  58.  
  59.  
  60. procedure TRExecFrm.Exit1Click(Sender: TObject);
  61. begin
  62.   Close
  63. end;
  64.  
  65. procedure TRExecFrm.Sockets1DataAvailable(Sender: TObject; Socket: Word);
  66. var
  67.   len: integer;
  68.   Buff: string;
  69.   i: integer;
  70. begin
  71.   Buff := Sockets1.Text;
  72.   len := Length(Buff);
  73.   if len > 1 then
  74.   begin
  75.     for i := 1 to len do
  76.     begin
  77.       if Buff[i] = #10 then
  78.       begin
  79.         Memo1.Lines.Add(line);
  80.         line := '';
  81.       end
  82.       else
  83.         { rexec includes terminating null as part of the length }
  84.         if Buff[i] <> #0 then
  85.           line := line + Buff[i];
  86.     end
  87.   end;
  88. end;
  89.  
  90. procedure TRExecFrm.Sockets1SessionClosed(Sender: TObject; Socket: Word);
  91. begin
  92.   Sockets1.SClose;
  93. end;
  94.  
  95. procedure TRExecFrm.Sockets1SessionConnected(Sender: TObject;
  96.   Socket: Word);
  97. var
  98.   len: integer;
  99.   szBuff: array[0..255] of char;
  100. begin
  101.   { We can't use Sockets1.Text := ... here because REXECD expects a null at
  102.     the end of the userid, password, and command }
  103.   len := 1;
  104.   Sockets1.SSend(Sockets1.SocketNumber,'',len);
  105.   StrPCopy(szBuff,efUserid.Text);
  106.   len := Length(efUserid.Text)+1;
  107.   Sockets1.SSend(Sockets1.SocketNumber,szBuff,len);
  108.   StrPCopy(szBuff,efPassword.Text);
  109.   len := Length(efPassword.Text)+1;
  110.   Sockets1.SSend(Sockets1.SocketNumber,szBuff,len);
  111.   StrPCopy(szBuff,efCommand.Text);
  112.   len := Length(efCommand.Text)+1;
  113.   Sockets1.SSend(Sockets1.SocketNumber,szBuff,len);
  114.  
  115. end;
  116.  
  117. end.
  118.